package com.tang.common.utils;

import org.apache.shiro.crypto.hash.Md5Hash;

import java.security.SecureRandom;

public class Md5Utils {

    /**
     * 生成随机Salt
     *
     * @param length Salt的长度
     * @return 生成的Salt
     */
    public static String generateSalt(int length) {
        // 生成盐值
        byte[] saltByte = new byte[length];
        new SecureRandom().nextBytes(saltByte);
        return new String(saltByte);
    }

    /**
     * 带Salt的MD5加密
     *
     * @param input 待加密的字符串
     * @param salt  盐值
     * @return 加密后的MD5字符串
     */
    public static String encryptMD5WithSalt(String input, String salt) {
        // 对密码进行加密处理
        Md5Hash md5Hash = new Md5Hash(input,salt);
        return md5Hash.toHex();
    }

    /**
     * 验证带Salt的MD5加密后的字符串是否与给定的明文匹配
     *
     * @param plainText 明文
     * @param md5       已加密的MD5字符串
     * @param salt      盐值
     * @return 是否匹配
     */
    public static boolean verifyMD5WithSalt(String plainText, String md5, String salt) {
        String encryptedText = encryptMD5WithSalt(plainText, salt);
        return encryptedText.equals(md5);
    }
}
